alliance v4 by member.* : this file contains one observation for every state in an alliance at the time of their alliance initiation
alliance v4 by member yearly.* : this file expands the alliance initiation format to include one observation for each state-year of the alliance
alliance v4 by dyad.* : the file contains one observation for every dyad in an alliance at the time of their alliance initiation
alliance v4 by dyad yearly.* : this file expands the dyadic alliance data to include one observation for each allied dyad-year
alliance v4 by directed.* : this file contains one observation for each directed dyad in an alliance at the time of their alliance initiation
alliance v4 by directed yearly.* : this file expands the directed-dyad alliance data to include one observation for each allied directed dyad-year
alliance_v4.1_by_directed_yearly.csv alliance_v4.1_by_directed.csv alliance_v4.1_by_dyad_yearly.csv alliance_v4.1_by_dyad.csv alliance_v4.1_by_member_yearly.csv alliance_v4.1_by_member.csv
Afghanistan war
us <- c("United States of America", "United Kingdom", "Canada", "Germany", "Australia")
us_ccode <- member_alliances$ccode[match(us, member_alliances$state_name)]
afg <- c("Afghanistan")
afg_ccode <- member_alliances$ccode[match(afg, member_alliances$state_name)]
countries<- c("United States of America", "United Kingdom", "Russia", "Japan", "Italy","Germany", "Turkey", "Austria-Hungary", "Romania", "Bulgaria", "Canada", "Australia", "China", "Vietnam", "South Korea", "North Korea", "Poland", "Austria", "Hungary", "Greece")
ct_ccode <- member_alliances$ccode[match(countries, member_alliances$state_name)]
reverse <- filter(dyad_al_year, ccode2 %in% ct_ccode)
reverse <- reverse[reverse$dyad_st_year >= 1900,]
forward <- filter(dyad_al, ccode1 %in% ct_ccode)
d=data.frame(x1=c(1914,1939, 1947, 1950, 1955, 2001), x2=c(1918, 1945, 1991, 1953, 1975, 2010), y1=c(0,0,0,0,0,0), y2=c(.4,.4,.4,.4,.4,.4), Conflict=c("WWI", "WWII", "Cold War", "Korean War", "Vietnam War", "Afghanistan War"), r=c(1,2,3,4,5,6))
ggplot() +
geom_point(data =reverse, aes(x=year, y = state_name2, color = state_name1)) +
geom_rect(data=d, mapping=aes(xmin=x1, xmax=x2, ymin="Australia", ymax="Vietnam", fill=Conflict),alpha=0.15) +
theme(legend.position="bottom")

“United States of America”, “United Kingdom”, “Russia”, “Japan”, “Italy”,“Germany”, “Turkey”, “Austria-Hungary”, “Romania”, “Bulgaria”, “Canada”, “Australia”, “China”, “Vietnam”, “South Korea”, “North Korea”, “Poland”, “Austria”, “Hungary”, “Greece”
dir_alliances <- gather(dir_al_year, treaty_type, idicator, defense:entente)
dir_alliances <- dir_alliances[!dir_alliances$idicator %in% 0,]
dir_alliances$dyad_end_year[dir_alliances$dyad_end_year %in% NA] = 2016
dir_alliances <- dir_alliances[dir_alliances$year>1900,]
ggplot() +
geom_point(data =dir_alliances[dir_alliances$ccode1 == 2, ], aes(x=year, y = state_name2, color = treaty_type), alpha = .5) +
geom_rect(data=d, mapping=aes(xmin=x1, xmax=x2, ymin="Afghanistan", ymax="Zimbabwe", fill=Conflict),alpha=0.15) +
theme(legend.position="bottom") + ggtitle("United States Alliances")

ggplot() +
geom_point(data =dir_alliances[dir_alliances$ccode1 == 200, ], aes(x=year, y = state_name2, color = treaty_type), alpha = .5) +
geom_rect(data=d, mapping=aes(xmin=x1, xmax=x2, ymin="Afghanistan", ymax="Zimbabwe", fill=Conflict),alpha=0.15) +
theme(legend.position="bottom") + ggtitle("United Kingdom Alliances")

ggplot() +
geom_point(data =dir_alliances[dir_alliances$ccode1 == 255, ], aes(x=year, y = state_name2, color = treaty_type), alpha = .5) +
geom_rect(data=d, mapping=aes(xmin=x1, xmax=x2, ymin="Afghanistan", ymax="Zimbabwe", fill=Conflict),alpha=0.15) +
theme(legend.position="bottom") + ggtitle("Germany")

ggplot() +
geom_point(data =dir_alliances[dir_alliances$ccode1 == 220, ], aes(x=year, y = state_name2, color = treaty_type), alpha = .5) +
geom_rect(data=d, mapping=aes(xmin=x1, xmax=x2, ymin="Afghanistan", ymax="Zimbabwe", fill=Conflict),alpha=0.15) +
theme(legend.position="bottom") + ggtitle("France")

ggplot() +
geom_point(data =dir_alliances[dir_alliances$ccode1 == 365, ], aes(x=year, y = state_name2, color = treaty_type), alpha = .5) +
geom_rect(data=d, mapping=aes(xmin=x1, xmax=x2, ymin="Afghanistan", ymax="Zimbabwe", fill=Conflict),alpha=0.15) +
theme(legend.position="bottom") + ggtitle("Russia")

ggplot() +
geom_point(data =dir_alliances[dir_alliances$ccode1 == 700, ], aes(x=year, y = state_name2, color = treaty_type), alpha = .5) +
geom_rect(data=d, mapping=aes(xmin=x1, xmax=x2, ymin="Afghanistan", ymax="Zimbabwe", fill=Conflict),alpha=0.15) +
theme(legend.position="bottom") + ggtitle("Afghanistan")

ggplot() +
geom_point(data =dir_alliances[dir_alliances$ccode1 == 20, ], aes(x=year, y = state_name2, color = treaty_type), alpha = .5) +
geom_rect(data=d, mapping=aes(xmin=x1, xmax=x2, ymin="Afghanistan", ymax="Zimbabwe", fill=Conflict),alpha=0.15) +
theme(legend.position="bottom") + ggtitle("Canada")

ggplot() +
geom_point(data =dir_alliances[dir_alliances$ccode1 == 40, ], aes(x=year, y = state_name2, color = treaty_type), alpha = .5) +
geom_rect(data=d, mapping=aes(xmin=x1, xmax=x2, ymin="Afghanistan", ymax="Zimbabwe", fill=Conflict),alpha=0.15) +
theme(legend.position="bottom") + ggtitle("Cuba")

ggplot() +
geom_point(data =dir_alliances[dir_alliances$ccode1 == 750, ], aes(x=year, y = state_name2, color = treaty_type), alpha = .5) +
geom_rect(data=d, mapping=aes(xmin=x1, xmax=x2, ymin="Afghanistan", ymax="Zimbabwe", fill=Conflict),alpha=0.15) +
theme(legend.position="bottom") + ggtitle("India")

ggplot() +
geom_point(data =dir_alliances[dir_alliances$ccode1 ==325, ], aes(x=year, y = state_name2, color = treaty_type), alpha = .5) +
geom_rect(data=d, mapping=aes(xmin=x1, xmax=x2, ymin="Afghanistan", ymax="Zimbabwe", fill=Conflict),alpha=0.15) +
theme(legend.position="bottom") + ggtitle("Italy")

ggplot() +
geom_point(data =dir_alliances[dir_alliances$ccode1 ==740, ], aes(x=year, y = state_name2, color = treaty_type), alpha = .5) +
geom_rect(data=d, mapping=aes(xmin=x1, xmax=x2, ymin="Afghanistan", ymax="Zimbabwe", fill=Conflict),alpha=0.15) +
theme(legend.position="bottom") + ggtitle("Japan")

ggplot() +
geom_point(data =dir_alliances[dir_alliances$ccode1 ==731, ], aes(x=year, y = state_name2, color = treaty_type), alpha = .5) +
geom_rect(data=d, mapping=aes(xmin=x1, xmax=x2, ymin="Afghanistan", ymax="Zimbabwe", fill=Conflict),alpha=0.15) +
theme(legend.position="bottom") + ggtitle("North Korea")

ggplot() +
geom_point(data =dir_alliances[dir_alliances$ccode1 ==230, ], aes(x=year, y = state_name2, color = treaty_type), alpha = .5) +
geom_rect(data=d, mapping=aes(xmin=x1, xmax=x2, ymin="Afghanistan", ymax="Zimbabwe", fill=Conflict),alpha=0.15) +
theme(legend.position="bottom") + ggtitle("Spain")

ggplot() +
geom_point(data =dir_alliances[dir_alliances$ccode1 ==300, ], aes(x=year, y = state_name2, color = treaty_type), alpha = .5) +
geom_rect(data=d, mapping=aes(xmin=x1, xmax=x2, ymin="Afghanistan", ymax="Zimbabwe", fill=Conflict),alpha=0.15) +
theme(legend.position="bottom") + ggtitle("Austri-Hungary")

ggplot() +
geom_point(data =dir_alliances[dir_alliances$ccode1 ==816, ], aes(x=year, y = state_name2, color = treaty_type), alpha = .5) +
geom_rect(data=d, mapping=aes(xmin=x1, xmax=x2, ymin="Afghanistan", ymax="Zimbabwe", fill=Conflict),alpha=0.15) +
theme(legend.position="bottom") + ggtitle("Vietnam")

#number of alliances
alliance_count <- dir_alliances[, c(2,3,14)]
alliance_count$count <- 1
gp_ct <- aggregate(cbind(count) ~ ccode1+state_name1+year, data = alliance_count, FUN = sum )
#countries <- c("Afghanistan", "Austria-Hungary", "Canada", "Cuba", "France", "Germany", "India", "Italy", "Japan", "North Korea", "Russia", "Spain", "United Kingdom", "United States of America", "Vietnam")
countries <- c("China", "France", "Germany", "Japan", "Russia", "United Kingdom", "United States of America")
countires_code <- member_alliances$ccode[match(countries, member_alliances$state_name)]
gp_ct <- filter(gp_ct, ccode1 %in% countires_code)
ggplot() +
geom_line(data =gp_ct, aes(x=year, y = count, color = state_name1), alpha = .5) +
geom_rect(data=d, mapping=aes(xmin=x1, xmax=x2, ymin=0, ymax=max(gp_ct$count), fill=Conflict),alpha=0.15) +
theme(legend.position="bottom") + ggtitle("Number of Alliances by Year")

LS0tCnRpdGxlOiAiQWxsaWFuY2VzIEFuYWx5c2lzIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgoKYGBge3J9CmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShncmlkKQpsaWJyYXJ5KGdyaWRFeHRyYSkKbGlicmFyeSh0aWR5cikKbGlicmFyeShkcGx5cikKbGlicmFyeSh2aXJpZGlzKQpsaWJyYXJ5KG9jZSkKbGlicmFyeSh2Y2QpCmxpYnJhcnkodmNkRXh0cmEpCmxpYnJhcnkoZXh0cmFjYXQpCgojIyBTZXQgZmlsZSBwYXRoCnBhdGggPSAiL1VzZXJzL2N5bnRoaWFjbGVtZW50L0Rlc2t0b3AiCgoKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBMb29raW5nIGF0IFVTIEFsbGlhbmNlcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZHlhZF9hbD0gcmVhZC5jc3YocGFzdGUocGF0aCwgInZlcnNpb240LjFfY3N2L2FsbGlhbmNlX3Y0LjFfYnlfZHlhZC5jc3YiLCBzZXA9ICIvIikpCmR5YWRfYWxfeWVhciA9IHJlYWQuY3N2KHBhc3RlKHBhdGgsICJ2ZXJzaW9uNC4xX2Nzdi9hbGxpYW5jZV92NC4xX2J5X2R5YWRfeWVhcmx5LmNzdiIsIHNlcD0gIi8iKSkKCm1lbWJlcl9hbGxpYW5jZXMgPSByZWFkLmNzdihwYXN0ZShwYXRoLCAidmVyc2lvbjQuMV9jc3YvYWxsaWFuY2VfdjQuMV9ieV9tZW1iZXIuY3N2Iiwgc2VwPSAiLyIpKQptZW1iZXJfYWxfeWVhciA9IHJlYWQuY3N2KHBhc3RlKHBhdGgsICJ2ZXJzaW9uNC4xX2Nzdi9hbGxpYW5jZV92NC4xX2J5X21lbWJlcl95ZWFybHkuY3N2Iiwgc2VwPSAiLyIpKQoKZGlyX2FsX3llYXI9IHJlYWQuY3N2KHBhc3RlKHBhdGgsICJ2ZXJzaW9uNC4xX2Nzdi9hbGxpYW5jZV92NC4xX2J5X2RpcmVjdGVkX3llYXJseS5jc3YiLCBzZXA9ICIvIikpCmRpcl9hbCA9IHJlYWQuY3N2KHBhc3RlKHBhdGgsICJ2ZXJzaW9uNC4xX2Nzdi9hbGxpYW5jZV92NC4xX2J5X2RpcmVjdGVkLmNzdiIsIHNlcD0gIi8iKSkKCgp1c19hbGxpYW5jZXMgPC0gZHlhZF9hbFtkeWFkX2FsJGNjb2RlMSA9PSAyLF0gCmFsbGlhbmNlcyA8LSB1c19hbGxpYW5jZXNbLGMoMjo1LCA4LCAxMSldCmFsbGlhbmNlczwtIGdhdGhlcihhbGxpYW5jZXMsIHN0X2VuZCwgeWVhciwgCWR5YWRfc3RfeWVhcjpkeWFkX2VuZF95ZWFyKQpnZ3Bsb3QoYWxsaWFuY2VzLCBhZXMoeD15ZWFyLCB5ID0gc3RhdGVfbmFtZTIsIGNvbG9yID0gc3RfZW5kKSkgKyBnZW9tX3BvaW50KCkgCgoKCgpgYGAKCgoKYWxsaWFuY2UgdjQgYnkgbWVtYmVyLiogOiB0aGlzIGZpbGUgY29udGFpbnMgb25lIG9ic2VydmF0aW9uIGZvciBldmVyeSBzdGF0ZSBpbiBhbiBhbGxpYW5jZSBhdCB0aGUgdGltZSBvZiB0aGVpciBhbGxpYW5jZSBpbml0aWF0aW9uICAKYWxsaWFuY2UgdjQgYnkgbWVtYmVyIHllYXJseS4qIDogdGhpcyBmaWxlIGV4cGFuZHMgdGhlIGFsbGlhbmNlIGluaXRpYXRpb24gZm9ybWF0IHRvIGluY2x1ZGUgb25lIG9ic2VydmF0aW9uIGZvciBlYWNoIHN0YXRlLXllYXIgb2YgdGhlIGFsbGlhbmNlICAKYWxsaWFuY2UgdjQgYnkgZHlhZC4qIDogdGhlIGZpbGUgY29udGFpbnMgb25lIG9ic2VydmF0aW9uIGZvciBldmVyeSBkeWFkIGluIGFuIGFsbGlhbmNlIGF0IHRoZSB0aW1lIG9mIHRoZWlyIGFsbGlhbmNlIGluaXRpYXRpb24gIAphbGxpYW5jZSB2NCBieSBkeWFkIHllYXJseS4qIDogdGhpcyBmaWxlIGV4cGFuZHMgdGhlIGR5YWRpYyBhbGxpYW5jZSBkYXRhIHRvIGluY2x1ZGUgb25lIG9ic2VydmF0aW9uIGZvciBlYWNoIGFsbGllZCBkeWFkLXllYXIgIAphbGxpYW5jZSB2NCBieSBkaXJlY3RlZC4qIDogdGhpcyBmaWxlIGNvbnRhaW5zIG9uZSBvYnNlcnZhdGlvbiBmb3IgZWFjaCBkaXJlY3RlZCBkeWFkIGluIGFuIGFsbGlhbmNlIGF0IHRoZSB0aW1lIG9mIHRoZWlyIGFsbGlhbmNlIGluaXRpYXRpb24gICAgCmFsbGlhbmNlIHY0IGJ5IGRpcmVjdGVkIHllYXJseS4qIDogdGhpcyBmaWxlIGV4cGFuZHMgdGhlIGRpcmVjdGVkLWR5YWQgYWxsaWFuY2UgZGF0YSB0byBpbmNsdWRlIG9uZSBvYnNlcnZhdGlvbiBmb3IgZWFjaCBhbGxpZWQgZGlyZWN0ZWQgZHlhZC15ZWFyICAKCmFsbGlhbmNlX3Y0LjFfYnlfZGlyZWN0ZWRfeWVhcmx5LmNzdgphbGxpYW5jZV92NC4xX2J5X2RpcmVjdGVkLmNzdgphbGxpYW5jZV92NC4xX2J5X2R5YWRfeWVhcmx5LmNzdgphbGxpYW5jZV92NC4xX2J5X2R5YWQuY3N2CmFsbGlhbmNlX3Y0LjFfYnlfbWVtYmVyX3llYXJseS5jc3YKYWxsaWFuY2VfdjQuMV9ieV9tZW1iZXIuY3N2CgoKCgojV1dJCgpgYGB7cn0KYWxsaWVkIDwtIGMoIlVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSIsICJVbml0ZWQgS2luZ2RvbSIsICJSdXNzaWEiLCAiSmFwYW4iLCAiSXRhbHkiKQphbGxpZWRfY2NvZGUgPC0gbWVtYmVyX2FsbGlhbmNlcyRjY29kZVttYXRjaChhbGxpZWQsIG1lbWJlcl9hbGxpYW5jZXMkc3RhdGVfbmFtZSldCgpjZW50cmFsIDwtIGMoIkdlcm1hbnkiLCAiVHVya2V5IiwgIkF1c3RyaWEtSHVuZ2FyeSIsICJSb21hbmlhIiwgIkJ1bGdhcmlhIikKY2VudHJhbF9jY29kZSA8LSBtZW1iZXJfYWxsaWFuY2VzJGNjb2RlW21hdGNoKGNlbnRyYWwsIG1lbWJlcl9hbGxpYW5jZXMkc3RhdGVfbmFtZSldCmBgYAoKCiNXV0lJCgpgYGB7cn0KYWxsaWVzIDwtIGMoIlVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSIsICJVbml0ZWQgS2luZ2RvbSIsICJGcmFuY2UiLCAiUnVzc2lhIiwgIkF1c3RyYWxpYSIsICJCZWxnaXVtIiwgIkJyYXppbCIsICJDYW5hZGEiLCAiQ2hpbmEiLCAiRGVubWFyayIsICJHcmVlY2UiLCAiTmV0aGVybGFuZHMiLCAiTmV3IFplYWxhbmQiLCAiTm9yd2F5IiwgIlBvbGFuZCIsICJTb3V0aCBBZnJpY2EiLCAiWXVnb3NsYXZpYSIpCmFsbGllc19jY29kZSA8LSBtZW1iZXJfYWxsaWFuY2VzJGNjb2RlW21hdGNoKGFsbGllcywgbWVtYmVyX2FsbGlhbmNlcyRzdGF0ZV9uYW1lKV0KCmF4aXMgPC0gYygiR2VybWFueSIsICJJdGFseSIsICJKYXBhbiIsICJIdW5nYXJ5IiwgIlJvbWFuaWEiLCAiQnVsZ2FyaWEiKQpheGlzX2Njb2RlIDwtIG1lbWJlcl9hbGxpYW5jZXMkY2NvZGVbbWF0Y2goYXhpcywgbWVtYmVyX2FsbGlhbmNlcyRzdGF0ZV9uYW1lKV0KYGBgCgojQ29sZCB3YXIKYGBge3J9Ck5BVE8gPC0gYygiVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhIiwgIlVuaXRlZCBLaW5nZG9tIiwgIkJlbGdpdW0iLCAiTmV0aGVybGFuZHMiLCAiRnJhbmNlIiwiQ2FuYWRhIiwgIlBvcnR1Z2FsIiwgIkl0YWx5IiwgIk5vcndheSIsICJEZW5tYXJrIiwgIkljZWFsbmQiLCAiVHVya2V5IiwgIkdyZWVjZSIpCm5hdG9fY2NvZGUgIDwtIG1lbWJlcl9hbGxpYW5jZXMkY2NvZGVbbWF0Y2goTkFUTywgbWVtYmVyX2FsbGlhbmNlcyRzdGF0ZV9uYW1lKV0KCndhcnNhdyA8LSBjKCJSdXNzaWEiLCAiQ3plY2hvc2xvdmFraWEiLCAiUm9tYW5pYSIsICJCdWxnYXJpYSIsICJQb2xhbmQiLCAiSHVuZ2FyeSIpCndhcnNhd19jY29kZSAgPC0gbWVtYmVyX2FsbGlhbmNlcyRjY29kZVttYXRjaCh3YXJzYXcsIG1lbWJlcl9hbGxpYW5jZXMkc3RhdGVfbmFtZSldCmBgYAoKCiNLb3JlYW4gV2FyCmBgYHtyfQpzayA8LSBjKCJVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EiLCAiVW5pdGVkIEtpbmdkb20iLCAiU291dGggS29yZWEiKQpza19jY29kZSAgPC0gbWVtYmVyX2FsbGlhbmNlcyRjY29kZVttYXRjaChzaywgbWVtYmVyX2FsbGlhbmNlcyRzdGF0ZV9uYW1lKV0KCgpuayA8LSBjKCJSdXNzaWEiLCAiTm9ydGggS29yZWEiLCAiQ2hpbmEiKQpua19jY29kZSAgPC0gbWVtYmVyX2FsbGlhbmNlcyRjY29kZVttYXRjaChuaywgbWVtYmVyX2FsbGlhbmNlcyRzdGF0ZV9uYW1lKV0KCmBgYAoKI1ZpZXRuYW0gV2FyCgpgYGB7cn0KdXMgPC0gYygiVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhIiwgIlNvdXRoIEtvcmVhIiwgIkNoaW5hIiwgIk5ldyBaZWFsYW5kIiwgIkF1c3RyYWxpYSIpCnVzX2Njb2RlICA8LSBtZW1iZXJfYWxsaWFuY2VzJGNjb2RlW21hdGNoKHVzLCBtZW1iZXJfYWxsaWFuY2VzJHN0YXRlX25hbWUpXQoKCnZpZXQgPC0gYygiUnVzc2lhIiwgIk5vcnRoIEtvcmVhIiwgIlZpZXRuYW0iLCAiQ3ViYSIpCnZpZXRfY2NvZGUgIDwtIG1lbWJlcl9hbGxpYW5jZXMkY2NvZGVbbWF0Y2godmlldCwgbWVtYmVyX2FsbGlhbmNlcyRzdGF0ZV9uYW1lKV0KYGBgCgojQWZnaGFuaXN0YW4gd2FyCgpgYGB7cn0KdXMgPC0gYygiVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhIiwgIlVuaXRlZCBLaW5nZG9tIiwgIkNhbmFkYSIsICJHZXJtYW55IiwgIkF1c3RyYWxpYSIpCnVzX2Njb2RlICA8LSBtZW1iZXJfYWxsaWFuY2VzJGNjb2RlW21hdGNoKHVzLCBtZW1iZXJfYWxsaWFuY2VzJHN0YXRlX25hbWUpXQoKCmFmZyA8LSBjKCJBZmdoYW5pc3RhbiIpCmFmZ19jY29kZSAgPC0gbWVtYmVyX2FsbGlhbmNlcyRjY29kZVttYXRjaChhZmcsIG1lbWJlcl9hbGxpYW5jZXMkc3RhdGVfbmFtZSldCmBgYAoKCmBgYHtyfQoKY291bnRyaWVzPC0gYygiVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhIiwgIlVuaXRlZCBLaW5nZG9tIiwgIlJ1c3NpYSIsICJKYXBhbiIsICJJdGFseSIsIkdlcm1hbnkiLCAiVHVya2V5IiwgIkF1c3RyaWEtSHVuZ2FyeSIsICJSb21hbmlhIiwgIkJ1bGdhcmlhIiwgIkNhbmFkYSIsICJBdXN0cmFsaWEiLCAiQ2hpbmEiLCAiVmlldG5hbSIsICJTb3V0aCBLb3JlYSIsICJOb3J0aCBLb3JlYSIsICJQb2xhbmQiLCAiQXVzdHJpYSIsICJIdW5nYXJ5IiwgIkdyZWVjZSIpCmN0X2Njb2RlICA8LSBtZW1iZXJfYWxsaWFuY2VzJGNjb2RlW21hdGNoKGNvdW50cmllcywgbWVtYmVyX2FsbGlhbmNlcyRzdGF0ZV9uYW1lKV0KCgoKYGBgCgpgYGB7ciBmaWcud2lkdGg9NiwgZmlnLmhlaWdodD04fQpyZXZlcnNlIDwtIGZpbHRlcihkeWFkX2FsX3llYXIsIGNjb2RlMiAlaW4lIGN0X2Njb2RlKQpyZXZlcnNlIDwtIHJldmVyc2VbcmV2ZXJzZSRkeWFkX3N0X3llYXIgPj0gMTkwMCxdCmZvcndhcmQgPC0gZmlsdGVyKGR5YWRfYWwsIGNjb2RlMSAlaW4lIGN0X2Njb2RlKQoKZD1kYXRhLmZyYW1lKHgxPWMoMTkxNCwxOTM5LCAxOTQ3LCAxOTUwLCAxOTU1LCAyMDAxKSwgeDI9YygxOTE4LCAxOTQ1LCAxOTkxLCAxOTUzLCAxOTc1LCAyMDEwKSwgeTE9YygwLDAsMCwwLDAsMCksIHkyPWMoLjQsLjQsLjQsLjQsLjQsLjQpLCBDb25mbGljdD1jKCJXV0kiLCAiV1dJSSIsICJDb2xkIFdhciIsICJLb3JlYW4gV2FyIiwgIlZpZXRuYW0gV2FyIiwgIkFmZ2hhbmlzdGFuIFdhciIpLCByPWMoMSwyLDMsNCw1LDYpKQoKZ2dwbG90KCkgKyAKICBnZW9tX3BvaW50KGRhdGEgPXJldmVyc2UsIGFlcyh4PXllYXIsIHkgPSBzdGF0ZV9uYW1lMiwgY29sb3IgPSBzdGF0ZV9uYW1lMSkpICsgCiAgZ2VvbV9yZWN0KGRhdGE9ZCwgbWFwcGluZz1hZXMoeG1pbj14MSwgeG1heD14MiwgeW1pbj0iQXVzdHJhbGlhIiwgeW1heD0iVmlldG5hbSIsIGZpbGw9Q29uZmxpY3QpLGFscGhhPTAuMTUpICsgCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJib3R0b20iKQoKCmBgYAoKIlVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSIsICJVbml0ZWQgS2luZ2RvbSIsICJSdXNzaWEiLCAiSmFwYW4iLCAiSXRhbHkiLCJHZXJtYW55IiwgIlR1cmtleSIsICJBdXN0cmlhLUh1bmdhcnkiLCAiUm9tYW5pYSIsICJCdWxnYXJpYSIsICJDYW5hZGEiLCAiQXVzdHJhbGlhIiwgIkNoaW5hIiwgIlZpZXRuYW0iLCAiU291dGggS29yZWEiLCAiTm9ydGggS29yZWEiLCAiUG9sYW5kIiwgIkF1c3RyaWEiLCAiSHVuZ2FyeSIsICJHcmVlY2UiCgpgYGB7ciBmaWcud2lkdGg9MTIsIGZpZy5oZWlnaHQ9MTJ9CgpkaXJfYWxsaWFuY2VzIDwtIGdhdGhlcihkaXJfYWxfeWVhciwgdHJlYXR5X3R5cGUsIGlkaWNhdG9yLCBkZWZlbnNlOmVudGVudGUpCgpkaXJfYWxsaWFuY2VzIDwtIGRpcl9hbGxpYW5jZXNbIWRpcl9hbGxpYW5jZXMkaWRpY2F0b3IgJWluJSAgMCxdCgpkaXJfYWxsaWFuY2VzJGR5YWRfZW5kX3llYXJbZGlyX2FsbGlhbmNlcyRkeWFkX2VuZF95ZWFyICVpbiUgTkFdID0gMjAxNgpkaXJfYWxsaWFuY2VzIDwtIGRpcl9hbGxpYW5jZXNbZGlyX2FsbGlhbmNlcyR5ZWFyPjE5MDAsXQoKZ2dwbG90KCkgKyAKICBnZW9tX3BvaW50KGRhdGEgPWRpcl9hbGxpYW5jZXNbZGlyX2FsbGlhbmNlcyRjY29kZTEgPT0gMiwgXSwgYWVzKHg9eWVhciwgeSA9IHN0YXRlX25hbWUyLCBjb2xvciA9IHRyZWF0eV90eXBlKSwgYWxwaGEgPSAuNSkgKyAKICBnZW9tX3JlY3QoZGF0YT1kLCBtYXBwaW5nPWFlcyh4bWluPXgxLCB4bWF4PXgyLCB5bWluPSJBZmdoYW5pc3RhbiIsIHltYXg9IlppbWJhYndlIiwgZmlsbD1Db25mbGljdCksYWxwaGE9MC4xNSkgKyAKICB0aGVtZShsZWdlbmQucG9zaXRpb249ImJvdHRvbSIpICsgZ2d0aXRsZSgiVW5pdGVkIFN0YXRlcyBBbGxpYW5jZXMiKQoKYGBgCgoKYGBge3IgZmlnLndpZHRoPTEyLCBmaWcuaGVpZ2h0PTEyfQpnZ3Bsb3QoKSArIAogIGdlb21fcG9pbnQoZGF0YSA9ZGlyX2FsbGlhbmNlc1tkaXJfYWxsaWFuY2VzJGNjb2RlMSA9PSAyMDAsIF0sIGFlcyh4PXllYXIsIHkgPSBzdGF0ZV9uYW1lMiwgY29sb3IgPSB0cmVhdHlfdHlwZSksIGFscGhhID0gLjUpICsgCiAgZ2VvbV9yZWN0KGRhdGE9ZCwgbWFwcGluZz1hZXMoeG1pbj14MSwgeG1heD14MiwgeW1pbj0iQWZnaGFuaXN0YW4iLCB5bWF4PSJaaW1iYWJ3ZSIsIGZpbGw9Q29uZmxpY3QpLGFscGhhPTAuMTUpICsgCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJib3R0b20iKSArIGdndGl0bGUoIlVuaXRlZCBLaW5nZG9tIEFsbGlhbmNlcyIpCgpgYGAKCmBgYHtyIGZpZy53aWR0aD0xMiwgZmlnLmhlaWdodD0xMn0KZ2dwbG90KCkgKyAKICBnZW9tX3BvaW50KGRhdGEgPWRpcl9hbGxpYW5jZXNbZGlyX2FsbGlhbmNlcyRjY29kZTEgPT0gMjU1LCBdLCBhZXMoeD15ZWFyLCB5ID0gc3RhdGVfbmFtZTIsIGNvbG9yID0gdHJlYXR5X3R5cGUpLCBhbHBoYSA9IC41KSArIAogIGdlb21fcmVjdChkYXRhPWQsIG1hcHBpbmc9YWVzKHhtaW49eDEsIHhtYXg9eDIsIHltaW49IkFmZ2hhbmlzdGFuIiwgeW1heD0iWmltYmFid2UiLCBmaWxsPUNvbmZsaWN0KSxhbHBoYT0wLjE1KSArIAogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0iYm90dG9tIikgKyBnZ3RpdGxlKCJHZXJtYW55IikKCmBgYAoKCmBgYHtyIGZpZy53aWR0aD0xMiwgZmlnLmhlaWdodD0xMn0KZ2dwbG90KCkgKyAKICBnZW9tX3BvaW50KGRhdGEgPWRpcl9hbGxpYW5jZXNbZGlyX2FsbGlhbmNlcyRjY29kZTEgPT0gMjIwLCBdLCBhZXMoeD15ZWFyLCB5ID0gc3RhdGVfbmFtZTIsIGNvbG9yID0gdHJlYXR5X3R5cGUpLCBhbHBoYSA9IC41KSArIAogIGdlb21fcmVjdChkYXRhPWQsIG1hcHBpbmc9YWVzKHhtaW49eDEsIHhtYXg9eDIsIHltaW49IkFmZ2hhbmlzdGFuIiwgeW1heD0iWmltYmFid2UiLCBmaWxsPUNvbmZsaWN0KSxhbHBoYT0wLjE1KSArIAogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0iYm90dG9tIikgKyBnZ3RpdGxlKCJGcmFuY2UiKQoKYGBgCgpgYGB7ciBmaWcud2lkdGg9MTIsIGZpZy5oZWlnaHQ9MTJ9CmdncGxvdCgpICsgCiAgZ2VvbV9wb2ludChkYXRhID1kaXJfYWxsaWFuY2VzW2Rpcl9hbGxpYW5jZXMkY2NvZGUxID09IDM2NSwgXSwgYWVzKHg9eWVhciwgeSA9IHN0YXRlX25hbWUyLCBjb2xvciA9IHRyZWF0eV90eXBlKSwgYWxwaGEgPSAuNSkgKyAKICBnZW9tX3JlY3QoZGF0YT1kLCBtYXBwaW5nPWFlcyh4bWluPXgxLCB4bWF4PXgyLCB5bWluPSJBZmdoYW5pc3RhbiIsIHltYXg9IlppbWJhYndlIiwgZmlsbD1Db25mbGljdCksYWxwaGE9MC4xNSkgKyAKICB0aGVtZShsZWdlbmQucG9zaXRpb249ImJvdHRvbSIpICsgZ2d0aXRsZSgiUnVzc2lhIikKCmBgYAoKCmBgYHtyIGZpZy53aWR0aD0xMiwgZmlnLmhlaWdodD0xMn0KZ2dwbG90KCkgKyAKICBnZW9tX3BvaW50KGRhdGEgPWRpcl9hbGxpYW5jZXNbZGlyX2FsbGlhbmNlcyRjY29kZTEgPT0gNzAwLCBdLCBhZXMoeD15ZWFyLCB5ID0gc3RhdGVfbmFtZTIsIGNvbG9yID0gdHJlYXR5X3R5cGUpLCBhbHBoYSA9IC41KSArIAogIGdlb21fcmVjdChkYXRhPWQsIG1hcHBpbmc9YWVzKHhtaW49eDEsIHhtYXg9eDIsIHltaW49IkFmZ2hhbmlzdGFuIiwgeW1heD0iWmltYmFid2UiLCBmaWxsPUNvbmZsaWN0KSxhbHBoYT0wLjE1KSArIAogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0iYm90dG9tIikgKyBnZ3RpdGxlKCJBZmdoYW5pc3RhbiIpCgpgYGAKCgpgYGB7ciBmaWcud2lkdGg9MTIsIGZpZy5oZWlnaHQ9MTJ9CmdncGxvdCgpICsgCiAgZ2VvbV9wb2ludChkYXRhID1kaXJfYWxsaWFuY2VzW2Rpcl9hbGxpYW5jZXMkY2NvZGUxID09IDIwLCBdLCBhZXMoeD15ZWFyLCB5ID0gc3RhdGVfbmFtZTIsIGNvbG9yID0gdHJlYXR5X3R5cGUpLCBhbHBoYSA9IC41KSArIAogIGdlb21fcmVjdChkYXRhPWQsIG1hcHBpbmc9YWVzKHhtaW49eDEsIHhtYXg9eDIsIHltaW49IkFmZ2hhbmlzdGFuIiwgeW1heD0iWmltYmFid2UiLCBmaWxsPUNvbmZsaWN0KSxhbHBoYT0wLjE1KSArIAogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0iYm90dG9tIikgKyBnZ3RpdGxlKCJDYW5hZGEiKQoKYGBgCgoKCgpgYGB7ciBmaWcud2lkdGg9MTIsIGZpZy5oZWlnaHQ9MTJ9CmdncGxvdCgpICsgCiAgZ2VvbV9wb2ludChkYXRhID1kaXJfYWxsaWFuY2VzW2Rpcl9hbGxpYW5jZXMkY2NvZGUxID09IDQwLCBdLCBhZXMoeD15ZWFyLCB5ID0gc3RhdGVfbmFtZTIsIGNvbG9yID0gdHJlYXR5X3R5cGUpLCBhbHBoYSA9IC41KSArIAogIGdlb21fcmVjdChkYXRhPWQsIG1hcHBpbmc9YWVzKHhtaW49eDEsIHhtYXg9eDIsIHltaW49IkFmZ2hhbmlzdGFuIiwgeW1heD0iWmltYmFid2UiLCBmaWxsPUNvbmZsaWN0KSxhbHBoYT0wLjE1KSArIAogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0iYm90dG9tIikgKyBnZ3RpdGxlKCJDdWJhIikKCmBgYAoKCgoKCmBgYHtyIGZpZy53aWR0aD0xMiwgZmlnLmhlaWdodD0xMn0KZ2dwbG90KCkgKyAKICBnZW9tX3BvaW50KGRhdGEgPWRpcl9hbGxpYW5jZXNbZGlyX2FsbGlhbmNlcyRjY29kZTEgPT0gNzUwLCBdLCBhZXMoeD15ZWFyLCB5ID0gc3RhdGVfbmFtZTIsIGNvbG9yID0gdHJlYXR5X3R5cGUpLCBhbHBoYSA9IC41KSArIAogIGdlb21fcmVjdChkYXRhPWQsIG1hcHBpbmc9YWVzKHhtaW49eDEsIHhtYXg9eDIsIHltaW49IkFmZ2hhbmlzdGFuIiwgeW1heD0iWmltYmFid2UiLCBmaWxsPUNvbmZsaWN0KSxhbHBoYT0wLjE1KSArIAogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0iYm90dG9tIikgKyBnZ3RpdGxlKCJJbmRpYSIpCgpgYGAKCgoKCgoKYGBge3IgZmlnLndpZHRoPTEyLCBmaWcuaGVpZ2h0PTEyfQpnZ3Bsb3QoKSArIAogIGdlb21fcG9pbnQoZGF0YSA9ZGlyX2FsbGlhbmNlc1tkaXJfYWxsaWFuY2VzJGNjb2RlMSA9PTMyNSwgXSwgYWVzKHg9eWVhciwgeSA9IHN0YXRlX25hbWUyLCBjb2xvciA9IHRyZWF0eV90eXBlKSwgYWxwaGEgPSAuNSkgKyAKICBnZW9tX3JlY3QoZGF0YT1kLCBtYXBwaW5nPWFlcyh4bWluPXgxLCB4bWF4PXgyLCB5bWluPSJBZmdoYW5pc3RhbiIsIHltYXg9IlppbWJhYndlIiwgZmlsbD1Db25mbGljdCksYWxwaGE9MC4xNSkgKyAKICB0aGVtZShsZWdlbmQucG9zaXRpb249ImJvdHRvbSIpICsgZ2d0aXRsZSgiSXRhbHkiKQoKYGBgCgoKYGBge3IgZmlnLndpZHRoPTEyLCBmaWcuaGVpZ2h0PTEyfQpnZ3Bsb3QoKSArIAogIGdlb21fcG9pbnQoZGF0YSA9ZGlyX2FsbGlhbmNlc1tkaXJfYWxsaWFuY2VzJGNjb2RlMSA9PTc0MCwgXSwgYWVzKHg9eWVhciwgeSA9IHN0YXRlX25hbWUyLCBjb2xvciA9IHRyZWF0eV90eXBlKSwgYWxwaGEgPSAuNSkgKyAKICBnZW9tX3JlY3QoZGF0YT1kLCBtYXBwaW5nPWFlcyh4bWluPXgxLCB4bWF4PXgyLCB5bWluPSJBZmdoYW5pc3RhbiIsIHltYXg9IlppbWJhYndlIiwgZmlsbD1Db25mbGljdCksYWxwaGE9MC4xNSkgKyAKICB0aGVtZShsZWdlbmQucG9zaXRpb249ImJvdHRvbSIpICsgZ2d0aXRsZSgiSmFwYW4iKQoKYGBgCgoKCmBgYHtyIGZpZy53aWR0aD0xMiwgZmlnLmhlaWdodD0xMn0KZ2dwbG90KCkgKyAKICBnZW9tX3BvaW50KGRhdGEgPWRpcl9hbGxpYW5jZXNbZGlyX2FsbGlhbmNlcyRjY29kZTEgPT03MzEsIF0sIGFlcyh4PXllYXIsIHkgPSBzdGF0ZV9uYW1lMiwgY29sb3IgPSB0cmVhdHlfdHlwZSksIGFscGhhID0gLjUpICsgCiAgZ2VvbV9yZWN0KGRhdGE9ZCwgbWFwcGluZz1hZXMoeG1pbj14MSwgeG1heD14MiwgeW1pbj0iQWZnaGFuaXN0YW4iLCB5bWF4PSJaaW1iYWJ3ZSIsIGZpbGw9Q29uZmxpY3QpLGFscGhhPTAuMTUpICsgCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJib3R0b20iKSArIGdndGl0bGUoIk5vcnRoIEtvcmVhIikKCmBgYAoKCgpgYGB7ciBmaWcud2lkdGg9MTIsIGZpZy5oZWlnaHQ9MTJ9CmdncGxvdCgpICsgCiAgZ2VvbV9wb2ludChkYXRhID1kaXJfYWxsaWFuY2VzW2Rpcl9hbGxpYW5jZXMkY2NvZGUxID09MjMwLCBdLCBhZXMoeD15ZWFyLCB5ID0gc3RhdGVfbmFtZTIsIGNvbG9yID0gdHJlYXR5X3R5cGUpLCBhbHBoYSA9IC41KSArIAogIGdlb21fcmVjdChkYXRhPWQsIG1hcHBpbmc9YWVzKHhtaW49eDEsIHhtYXg9eDIsIHltaW49IkFmZ2hhbmlzdGFuIiwgeW1heD0iWmltYmFid2UiLCBmaWxsPUNvbmZsaWN0KSxhbHBoYT0wLjE1KSArIAogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0iYm90dG9tIikgKyBnZ3RpdGxlKCJTcGFpbiIpCgpgYGAKCgoKCmBgYHtyIGZpZy53aWR0aD0xMiwgZmlnLmhlaWdodD0xMn0KZ2dwbG90KCkgKyAKICBnZW9tX3BvaW50KGRhdGEgPWRpcl9hbGxpYW5jZXNbZGlyX2FsbGlhbmNlcyRjY29kZTEgPT0zMDAsIF0sIGFlcyh4PXllYXIsIHkgPSBzdGF0ZV9uYW1lMiwgY29sb3IgPSB0cmVhdHlfdHlwZSksIGFscGhhID0gLjUpICsgCiAgZ2VvbV9yZWN0KGRhdGE9ZCwgbWFwcGluZz1hZXMoeG1pbj14MSwgeG1heD14MiwgeW1pbj0iQWZnaGFuaXN0YW4iLCB5bWF4PSJaaW1iYWJ3ZSIsIGZpbGw9Q29uZmxpY3QpLGFscGhhPTAuMTUpICsgCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJib3R0b20iKSArIGdndGl0bGUoIkF1c3RyaS1IdW5nYXJ5IikKCmBgYAoKCgpgYGB7ciBmaWcud2lkdGg9MTIsIGZpZy5oZWlnaHQ9MTJ9CmdncGxvdCgpICsgCiAgZ2VvbV9wb2ludChkYXRhID1kaXJfYWxsaWFuY2VzW2Rpcl9hbGxpYW5jZXMkY2NvZGUxID09ODE2LCBdLCBhZXMoeD15ZWFyLCB5ID0gc3RhdGVfbmFtZTIsIGNvbG9yID0gdHJlYXR5X3R5cGUpLCBhbHBoYSA9IC41KSArIAogIGdlb21fcmVjdChkYXRhPWQsIG1hcHBpbmc9YWVzKHhtaW49eDEsIHhtYXg9eDIsIHltaW49IkFmZ2hhbmlzdGFuIiwgeW1heD0iWmltYmFid2UiLCBmaWxsPUNvbmZsaWN0KSxhbHBoYT0wLjE1KSArIAogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0iYm90dG9tIikgKyBnZ3RpdGxlKCJWaWV0bmFtIikKCmBgYAoKCmBgYHtyfQoKI251bWJlciBvZiBhbGxpYW5jZXMgCgphbGxpYW5jZV9jb3VudCA8LSBkaXJfYWxsaWFuY2VzWywgYygyLDMsMTQpXQphbGxpYW5jZV9jb3VudCRjb3VudCA8LSAxIAoKZ3BfY3QgPC0gYWdncmVnYXRlKGNiaW5kKGNvdW50KSB+IGNjb2RlMStzdGF0ZV9uYW1lMSt5ZWFyLCBkYXRhID0gYWxsaWFuY2VfY291bnQsIEZVTiA9IHN1bSApCgojY291bnRyaWVzIDwtIGMoIkFmZ2hhbmlzdGFuIiwgIkF1c3RyaWEtSHVuZ2FyeSIsICJDYW5hZGEiLCAiQ3ViYSIsICJGcmFuY2UiLCAiR2VybWFueSIsICJJbmRpYSIsICJJdGFseSIsICJKYXBhbiIsICJOb3J0aCBLb3JlYSIsICJSdXNzaWEiLCAiU3BhaW4iLCAiVW5pdGVkIEtpbmdkb20iLCAiVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhIiwgIlZpZXRuYW0iKQpjb3VudHJpZXMgPC0gYygiQ2hpbmEiLCAiRnJhbmNlIiwgIkdlcm1hbnkiLCAiSmFwYW4iLCAgIlJ1c3NpYSIsICJVbml0ZWQgS2luZ2RvbSIsICJVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EiKQpjb3VudGlyZXNfY29kZSA8LSAgbWVtYmVyX2FsbGlhbmNlcyRjY29kZVttYXRjaChjb3VudHJpZXMsIG1lbWJlcl9hbGxpYW5jZXMkc3RhdGVfbmFtZSldCgpncF9jdCA8LSBmaWx0ZXIoZ3BfY3QsIGNjb2RlMSAlaW4lIGNvdW50aXJlc19jb2RlKQoKCmBgYAoKCgpgYGB7ciBmaWcud2lkdGg9MTQsIGZpZy5oZWlnaHQ9OH0KCmdncGxvdCgpICsgCiAgZ2VvbV9saW5lKGRhdGEgPWdwX2N0LCBhZXMoeD15ZWFyLCB5ID0gY291bnQsIGNvbG9yID0gc3RhdGVfbmFtZTEpLCBhbHBoYSA9IC41KSArIAogIGdlb21fcmVjdChkYXRhPWQsIG1hcHBpbmc9YWVzKHhtaW49eDEsIHhtYXg9eDIsIHltaW49MCwgeW1heD1tYXgoZ3BfY3QkY291bnQpLCBmaWxsPUNvbmZsaWN0KSxhbHBoYT0wLjE1KSArIAogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0iYm90dG9tIikgKyBnZ3RpdGxlKCJOdW1iZXIgb2YgQWxsaWFuY2VzIGJ5IFllYXIiKQpgYGAKCg==